import { asyncRouterMap, constantRouterMap } from '@/config/router.config'
import _ from 'lodash'
/**
 * 过滤账户是否拥有某一个权限，并将菜单从加载列表移除
 *
 * @param permission
 * @param route
 * @returns {boolean}
 */
// eslint-disable-next-line no-unused-vars
function hasPermission(permission, route) {
    if (route.meta && route.meta.permission) {
        let flag = false
        for (let i = 0, len = permission.length; i < len; i++) {
            flag = route.meta.permission.includes(permission[i])
            if (flag) {
                return true
            }
        }
        return false
    }
    return true
}

/**
 * 单账户多角色时，使用该方法可过滤角色不存在的菜单
 *
 * @param roles
 * @param route
 * @returns {*}
 */
// eslint-disable-next-line
function hasRole(roles, route) {
    if (route.meta && route.meta.roles) {
        return route.meta.roles.includes(roles.id)
    } else {
        return true
    }
}

function filterAsyncRouter(routerMap, roles) {
    // const accessedRouters = routerMap.filter(route => {
    //     if (hasPermission(roles, route)) {
    //         if (route.children && route.children.length) {
    //             route.children = filterAsyncRouter(route.children, roles)
    //         }
    //         return true
    //     }
    //     return false
    // })
    // return accessedRouters
    return routerMap
}

const permission = {
    state: {
        routers: constantRouterMap,
        addRouters: []
    },
    mutations: {
        SET_ROUTERS: (state, routers) => {
            state.addRouters = routers
            state.routers = constantRouterMap.concat(routers)
        }
    },
    actions: {
        GenerateRoutes({ commit }, data) {
            return new Promise(resolve => {
                const { roles } = data

                const routerMap = _.cloneDeep(asyncRouterMap)

                const accessedRouters = filterAsyncRouter(routerMap, roles)

                commit('SET_ROUTERS', accessedRouters)

                resolve()
            })
        }
    }
}

export default permission
